import { VfMessage, VfUtils } from '@/utils/vf-utils'
import { TableDataType } from '@/base/pojo/TableDataType.js'

/**
 * 根据字段生成模拟数据
 * 
 * @param {Array} columns 
 * @param {Object} dataItem 
 * @returns 
 */
const generateDataByColumns = (columns, dataItem={}) => {
  columns.forEach(colItem => {
    const { title, formatRule: rule } = colItem
    let value = title
    if (rule) {
      if (TableDataType.DATE.includeFormat(rule)) {
        value = '2099-12-31 24:00:00'
      } else if (TableDataType.NUMBER.includeFormat(rule)) {
        value = 99999999
      } else if (TableDataType.ACCOUNT.includeFormat(rule)) {
        value = '62233279641459259'
      }
    }
    if (colItem.children && colItem.children.length > 0) {
      dataItem = generateDataByColumns(colItem.children, dataItem)
    } else {
      dataItem[colItem.field] = value
    }
  })
  return dataItem
}


export default {
  /**
   * 消息提示
   * @param {String} content 提示内容
   */
  openMessage: function(content) {
    VfMessage.warning(content)
  },
  /**
   * 转义表格数据
   * 
   * @param {Array} tableData 
   * @param {Object} param 参数
   * @returns 
   */
  parseTableData: function(tableData, { level=1, parentId=0, fieldRow = null }) {
    if (!tableData) return []
    // let { level = 1, parentId = 0 } = config;
    return tableData.map((col, colIndex) => {
      // 设置ID，作为唯一标识
      col['id'] = col.id || VfUtils.getUUID();
      // 设置级别，便于数据校验
      col['level'] = level;
      // 设置父级ID
      col['parentId'] = col.parentId || parentId;
      // 初始化一些字段信息，并设置默认参数
      if (fieldRow) {
        Object.entries(fieldRow).forEach(([key, value]) => {
          if (!Reflect.has(col, key)) col[key] = value
        })
      }
      // 处理子级
      if (col.children && col.children.length) {
        col['sortable'] = false;
        col['childNum'] = col.children.length;
        delete col.kind;
        delete col.width;
        col.children = this.parseTableData(col.children, {
          level: level+1,
          childNum: col.children.length,
          parentId: col.id,
          parentIndex: colIndex,
          fieldRow,
        });
      }
      tableNodeMap[col.id] = col;
      return col;
    })
  },
  /**
   * 对象中是否存在子级节点
   *
   * @param {Object} target 目标对象
   * @param {String} children 目标对象的子级key， 默认为 children
   * @returns {Boolean} true: 存在 false: 不存在
   */
  isExistChildren: function (target, children='children') {
    if (!target) return false
    return target[children] && target[children].length
  },
  /**
   * 获取没有子级的样式类名
   *
   * @param {Object} target 目标对象
   * @param {String} children 目标对象的子级key， 默认为 children
   * @returns {String} 样式类名
   */
  getNotChildrenClassName: function (target, children='children') {
    return this.isExistChildren(target, children) ? 'not-edit' : ''
  },
  /**
   * 生成表格数据
   * @param {Array} columns 生成表格字段
   */
  generateTableData: function (columns, tableConfig={}) {
    let tableDataItem = generateDataByColumns(columns)
    if (tableConfig.keyField) { tableDataItem[tableConfig.keyField] = 'keyField' }
    return [ tableDataItem ]
  }
}